iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
1
Software Development

以資料庫為開發核心,利用通用 API 玩轉後端資料存取的概念與實作系列 第 17

Day17:不同資料庫,常用的 SQL 語法轉換原則 I

  • 分享至 

  • xImage
  •  

先前的發文,大部分的範例都是用 MS-SQL 的 T-SQL 語法寫成。但是,很多童鞋可能更偏好用 MySQL(MarisDB) 或 PostgreSQL。所以接下來,我就先列表說明一下這幾個資料庫之間,基本的一些語法差異,然後在接下來的文章,翻寫之前的範例程式,實際比較中間的差異。

由於我對 Markdown 語法在 Table 中如何換行不熟,試了一下,最後還是先寫在 word 中,再轉為圖檔。下面是三種不同資料庫語法的比較,請對照參考。

https://ithelp.ithome.com.tw/upload/images/20181025/201114219OsMzgzj3F.jpg
https://ithelp.ithome.com.tw/upload/images/20181025/20111421q8DkgfLbH4.jpg
https://ithelp.ithome.com.tw/upload/images/20181025/20111421vIrA0braVn.jpg
https://ithelp.ithome.com.tw/upload/images/20181025/20111421pxGdAuz2sq.jpg
https://ithelp.ithome.com.tw/upload/images/20181025/20111421qdVrT6IHSA.jpg
https://ithelp.ithome.com.tw/upload/images/20181025/20111421yB6yhxjoE3.jpg

https://ithelp.ithome.com.tw/upload/images/20181025/201114217FT0rV9P49.jpg

在 Day14 的系列文中,有先列出上面這3種資料庫的系統函數,和今天的主題相呼應。如此就大致將不同資料庫語法的差異,全面地做一個簡單的對比。仔細看,差異並不是十分的巨大。

為什麼我會花這麼多時間談資料庫的轉換? 甚至我還有一個開發中但是暫時 Pending 的小專案,想要寫一個專門轉換不同資料庫的 Store Procedure 及 udf 的轉換程式。主要還是因為我主張的「以資料庫為開發核心」這個開發方法論,任何的開發架構都不應該有過多的限制,而「以資料庫為開發核心」最會被人挑戰的劣勢,應該就是無法跨資料庫執行,所以我必須想辦法降低這個問題的影響。當然,大部分的情況,一個系統或是組織,通常都只會專精在一個資料庫上,沒有人會沒事隨便變更使用的資料庫系統,這會付出極高昂的成本。

另外,就是成本越來越高的商業資料庫授權,及相對而言功能越來越完善的 Opensource 社群。這個趨勢讓我必須正視 Opensource 資料庫的影響力,並能一併納入我的架構方法中。

接下來,我在把轉換語法時的一些注意事項,條列如下

  • 將 create proc 或是 alert proc 改為 create or replace procedure
  • 將 @ replace 為 _,@ 有特定用處,變數名稱開頭在 ms-sql 一定要@aaa
    但是 MySQL 一定不行,所以通常我會 replace 所有的 @ 為 _
  • 將所有的 declare 統一移到程式的最上方。
    因為 ms-sql 的 T-SQL 可以允許任意處宣告 declare 變數,但是 MySQL 不允許。
  • Select 欄位內容存成變數的寫法
    Ms-sql 的寫法
    Select @a=a,@b=b,@c=c from xxx where xxx
    MySQL 的寫法
    Select a,b,c into _a,_b,_c
  • If else 的寫法
    MySQL 一定要在最後面有 end if;
    Ms-sql 一定用 begin end 包起來,其他就要仔細比對
  • While 的寫法
    MySQL 最後要用 end while; 結束,其他差異不大。

明天我會試著將前天的實際範例(Store Procedure 及 udf) 改為 MariaDB 版,因為 MariaDB 並不支援 Table 這種回傳格式,我會改用固定式暫存表配合 guid 實作。我們明天見。


上一篇
Day16:進階的 SQL 語法簡介 II
下一篇
Day18:不同資料庫,常用的 SQL 語法轉換原則 II
系列文
以資料庫為開發核心,利用通用 API 玩轉後端資料存取的概念與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言